// 这个文件会帮我们打包 packages下的模块，最终打包出js文件
// node dev.js (要打包的名字 -f 打包的格式) === argv.slice(2)

import minimist from "minimist";
import { createRequire } from "module";
import { resolve, dirname } from "path"
import { fileURLToPath } from "url";
import esbuild from "esbuild"
//node中的命令函数通过process 来获取 process.argv
const args = minimist(process.argv.slice(2))
const __filename =  fileURLToPath(import.meta.url)//获取当前文件的绝对路径
const __dirname = dirname(__filename)//node中esm模块没有__dirname, 获取当前文件所在文件夹的绝对路径
const require = createRequire(import.meta.url)

const target = args._[0] || 'reactivity'; //打包哪个项目
const format = args.f || 'iife'
console.log('args', __filename, __dirname);

//入口文件
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = require(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry],//入口
    outfile:resolve(__dirname, `../packages/${target}/dist/${target}.js`),//出口
    bundle: true,//reactivtity => shared 会打包在一起
    platform: 'browser',//打包后给浏览器使用
    sourcemap: true,//可以测试源代码
    format: format, // cjs esm iife
    globalName: pkg.buildOptions?.name
}).then((ctx)=>{
    console.log('start dev');
    return ctx.watch()//监考入口文件持续进行打包处理
})